package com.czg.jsonschema2lombokpojo.rules;

import org.apache.commons.lang3.StringUtils;
import com.czg.jsonschema2lombokpojo.Schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.sun.codemodel.JDocComment;
import com.sun.codemodel.JDocCommentable;

/**
 * 应用“description”schema属性。
 *
 * @see <a
 * href="http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.22">http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.22</a>
 */
public class DescriptionRule implements Rule<JDocCommentable, JDocComment> {

    protected DescriptionRule() {
    }

    /**
     * 应用此schema规则执行所需的代码生成步骤。
     * <p>
     * 当找到描述节点并应用此规则时，描述的值将作为类级JavaDoc注解添加。
     *
     * @param nodeName        此描述应用于的对象的名称
     * @param node            “description”schema节点
     * @param parent          父节点
     * @param generatableType 可注解的代码生成构造，通常是一个Java类，应该应用此描述
     * @return 为包含描述而创建的JavaDoc注解
     */
    @Override
    public JDocComment apply(String nodeName, JsonNode node, JsonNode parent, JDocCommentable generatableType, Schema schema) {
        return addDoc(generatableType, node.asText());
    }

    public static JDocComment addDoc(JDocCommentable generatableType, String descriptionText) {
        JDocComment javadoc = generatableType.javadoc();
        if (StringUtils.isNotBlank(descriptionText)) {
            String[] lines = descriptionText.split("/\r?\n/");
            for (String line : lines) {
                javadoc.append(line);
            }
        }
        return javadoc;
    }

}
